package com.example.quartzdemo.springTask;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * TODO   @Scheduled 注解就能很方便地创建一个定时任务
 *        @Scheduled 的常见用法：固定速率执行、固定延迟执行、初始延迟执行、使用 Cron 表达式执行定时任务。
 *        在 SpringBoot 中我们只需要在启动类上加上@EnableScheduling便可以启动定时任务了。
 *
 * @ClassName SpringTaskTest
 * @Author xiaojiang
 * @Date 2021/11/15 上午 10:48
 */
@Component
public class SpringTaskTest {




    /**
     *  TODO  fixedRate：固定速率执行。每5秒执行一次。
     * @Author 江
     * @Date 2021/11/15 上午 10:54
     */
    @Scheduled(fixedRate = 5000)
    public void reportCurrentTimeWithFixedRate() {
        System.out.println("fixedRate：固定速率执行。每5秒执行一次。");
    }


    /**
     *  TODO  fixedDelay：固定延迟执行。距离上一次调用成功后2秒才执。
     * @Author 江
     * @Date 2021/11/15 上午 10:54
     */
    @Scheduled(fixedDelay = 2000)
    public void reportCurrentTimeWithFixedDelay() {
        System.out.println("fixedDelay：固定延迟执行。距离上一次调用成功后2秒才执。");
    }

    /**
     *  TODO  initialDelay:初始延迟。任务的第一次执行将延迟5秒，然后将以5秒的固定间隔执行。
     * @Author 江
     * @Date 2021/11/15 上午 10:53
     */
    @Scheduled(initialDelay = 5000, fixedRate = 5000)
    public void reportCurrentTimeWithInitialDelay() {
        System.out.println("initialDelay:初始延迟。任务的第一次执行将延迟5秒，然后将以5秒的固定间隔执行。");
    }

    /**
     *  TODO  cron：使用Cron表达式。 每分钟的1，2秒运行
     * @Author 江
     * @Date 2021/11/15 上午 10:50
     */
    @Scheduled(cron = "1-2 * * * * ? ")
    public void reportCurrentTimeWithCronExpression() {
        System.out.println("使用Cron表达式。 每分钟的1，2秒运行");
    }


}
